/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.elecciones.DAO;

import com.elecciones.Beans.Voto;
import com.elecciones.Conexion.conexionBD;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author open12
 */
public class votosDAO {

  private Connection conn = null;
  private static String guardarVoto = "INSERT INTO votos (id, cedula, genero, ciudad, numeroTarjeton) VALUES (null, ?, ?, ?, ?)";
  private static String persoXCandidato = "SELECT  COUNT( * ) AS total FROM `votos` WHERE numeroTarjeton = ?";
  private static String ciudadXCandidato = "SELECT COUNT(id) AS total,ciudad FROM votos GROUP BY ciudad ORDER BY total DESC LIMIT 0,1";
  private static String tarjCandiGana = "SELECT COUNT( id ) as total , numeroTarjeton FROM votos GROUP BY numeroTarjeton LIMIT 0,1";
  private static String cadidatoGana = "SELECT CONCAT( nombre,' ',apellido ) AS nombre,partidoPolitico FROM candidatos WHERE tarjeton = ?";
   private static String Genero = "SELECT  COUNT(id) AS total FROM `votos` WHERE genero = ?";
  
  public votosDAO() throws SQLException {
    this.conn = conexionBD.obtenerConexion();
  }
  public static boolean esEntero(String input){
    boolean parsable = true;
    try{
        Integer.parseInt(input);
    }catch(NumberFormatException e){
        parsable = false;
    }
    return parsable;
  }
  
    //INICIO METODO PARA TRAER EL CANDIDATO GANADOR
  public String[] partidoGanador(){
    String[] mensajeDevuelto = new String[2];
    try {
      PreparedStatement ps = conn.prepareStatement(tarjCandiGana);
          ResultSet resultado = ps.executeQuery();
          while (resultado.next()) {
            int total = resultado.getInt("total");
            int numTarjeton = resultado.getInt("numeroTarjeton");
            mensajeDevuelto[0] = ""+total;
            PreparedStatement candidato = conn.prepareStatement(cadidatoGana);
            candidato.setInt(1, numTarjeton);
            ResultSet resulCandidato = candidato.executeQuery();
            while (resulCandidato.next()) {
             mensajeDevuelto[1] = resulCandidato.getNString("partidoPolitico");
           }
         } 
    } catch (SQLException ex) {
      Logger.getLogger(candidatosDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return mensajeDevuelto;   
        
  }
  //FIN METODO PARA TRAER EL CANDIDATO GANADOR
    //INICIO METODO PARA TRAER EL CANDIDATO GANADOR
  public String[] candidatoGanador(){
    String[] mensajeDevuelto = new String[2];
    try {
      PreparedStatement ps = conn.prepareStatement(tarjCandiGana);
          ResultSet resultado = ps.executeQuery();
          while (resultado.next()) {
            int total = resultado.getInt("total");
            int numTarjeton = resultado.getInt("numeroTarjeton");
            mensajeDevuelto[0] = ""+total;
            PreparedStatement candidato = conn.prepareStatement(cadidatoGana);
            candidato.setInt(1, numTarjeton);
            ResultSet resulCandidato = candidato.executeQuery();
            while (resulCandidato.next()) {
             mensajeDevuelto[1] = resulCandidato.getNString("nombre");
           }
         } 
    } catch (SQLException ex) {
      Logger.getLogger(candidatosDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return mensajeDevuelto;   
        
  }
  //FIN METODO PARA TRAER EL CANDIDATO GANADOR
  
  //INICIO METODO PARA TRAER EL # VOTOS DE CANDIDATO X
  public String personasXCandidato(String valido){
    String mensajeDevuelto = "";
    String[] cadenaValida = valido.split(" ");
    try {
      PreparedStatement ps = conn.prepareStatement(persoXCandidato);
      ps.setInt(1, Integer.parseInt(cadenaValida[4]));
      ResultSet resultado = ps.executeQuery();
      while (resultado.next()) {
          mensajeDevuelto=""+resultado.getInt("total");
     } 
    } catch (SQLException ex) {
      Logger.getLogger(candidatosDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return mensajeDevuelto;   
        
  }
  //FIN METODO PARA TRAER EL # VOTOS CANDIDATO  X
  
  //INICIO METODO PARA TRAER LA CIUDAD CON MAS VOTOS
  public String[] ciudadXCandidato(String valido){
    String [] ciudad = new String [2] ;
      try {
          PreparedStatement ps = conn.prepareStatement(ciudadXCandidato);
          ResultSet resultado = ps.executeQuery();
          while (resultado.next()) {
            int total = resultado.getInt("total");
            ciudad[0] = ""+total;
            ciudad[1] = resultado.getNString("ciudad");
         } 
      } catch (SQLException ex) {
        Logger.getLogger(candidatosDAO.class.getName()).log(Level.SEVERE, null, ex);
      }
    return ciudad;
    
  }
  //FIN INICIO METODO PARA TRAER LA CIUDAD CON MAS VOTOS
  
  public int Genero(String primero) {
       int total = 0;
       try {
           PreparedStatement ps = conn.prepareStatement(Genero);
           ps.setString(1, primero);
           ResultSet resultado = ps.executeQuery();
           while (resultado.next()) {
               total = resultado.getInt("total");
           }
       } catch (SQLException ex) {
           Logger.getLogger(candidatosDAO.class.getName()).log(Level.SEVERE, null, ex);
       }
       return total;
   }


  public boolean guardar(Voto votoGuardar) {
    boolean resultado = true;
    try {
      PreparedStatement ps = conn.prepareStatement(guardarVoto);
      ps.setString(1, votoGuardar.getCedula());
      ps.setString(2, votoGuardar.getGenero());
      ps.setString(3, votoGuardar.getCiudad());
      ps.setInt(4, votoGuardar.getNumeroTarjeton());
      if (ps.executeUpdate() == 0) {
        resultado = false;
      }
    } catch (SQLException ex) {
      Logger.getLogger(votosDAO.class.getName()).log(Level.SEVERE, null, ex);
      resultado = false;
    }
    return resultado;
  }

}
